package com.zch.client.spring.mqtt.dto;

import lombok.Data;

@Data
public class MqttSendRequest {
    /**
     * 服务质量等级 0~2 越大消息投递越可靠，但是开销也最大
     * 作用：定义消息传递的可靠性级别。
     * 可选值：
     * 0（最多一次）：消息可能丢失，但传输最快。适合不重要的数据（如传感器噪声）。
     * 1（至少一次）：确保消息到达，但可能重复。接收方需处理重复消息。
     * 2（恰好一次）：最高可靠性，确保消息不丢失且不重复。性能开销最大。
     * 示例场景：
     * qos=0：环境温度数据（允许偶尔丢失）。
     * qos=2：支付指令（必须准确传达）。
     */
   private int qos=1;
    /**
     * 保留标志
     * 作用：控制消息是否在服务器中持久化，供新订阅者立即获取。
     * true：服务器保留消息，新订阅者会立即收到最后一条保留消息。
     * false：消息不保留，仅实时传递。
     * 示例场景：
     * retained=true：设备状态（如“门锁已关闭”），新订阅者需立即知道当前状态。
     * retained=false：实时传感器数据（如当前温度）。
     */
   private boolean retained;
    /**
     * 作用：消息的目标主题，用于路由消息到订阅者。
     * 格式：分层结构（如 home/livingroom/temperature），支持通配符（+、#）。
     * 规则：
     * 区分大小写。
     * 不能包含空字符或通配符（发布时）。
     * 示例：
     * topic="sensors/1/temperature"：发布到 ID 为 1 的传感器温度主题。
     */
   private String topic;
    /**
     * 作用：实际传输的数据，通常是字符串或二进制数据。
     * 格式：
     * 文本：JSON、XML 等（如 {"temp": 25.5}）。
     * 二进制：图像、加密数据等（需转换为字节数组）。
     * 注意：MQTT 不限制内容格式，由应用层解析。
     */
   private String message;

    /**
     * 数值只能是0~2
     * @return
     */
    public int getQos(){
        if(qos>=2){
            return 2;
        }
       if(qos<=0){
           return 0;
       }
       return qos;
    }
}
